/*-------------------------------------------------------------------------
 *
 * postgres_ext.h
 *
 *	   此文件包含在PostgreSQL中无处不在的东西的声明
 *	并且可被前端接口库的客户端访问。
 *	例如，Oid类型是libpq和其他库的API的一部分。
 *
 *	   特定于某个接口的声明应该
 *	放在该接口的头文件中（如libpq-fe.h）。此
 *	文件仅用于基本的Postgres声明。
 *
 *	   用户编写的C函数不算作“外部于Postgres”。
 *	这些函数更像是对后端本身的本地修改，并且
 *	使用其他内部的Postgres头文件与后端接口。
 *
 * src/include/postgres_ext.h
 *
 *-------------------------------------------------------------------------
 */

#ifndef POSTGRES_EXT_H
#define POSTGRES_EXT_H

#include "pg_config_ext.h"

/*
 * 对象ID是Postgres中的基本类型。
 */
typedef unsigned int Oid;

#ifdef __cplusplus
#define InvalidOid		(Oid(0))
#else
#define InvalidOid		((Oid) 0)
#endif

#define OID_MAX  UINT_MAX
/* 您需要包含 <limits.h> 以使用上面的 #define */

#define atooid(x) ((Oid) strtoul((x), NULL, 10))
/* 上述需要 <stdlib.h> */


/* 为客户端API声明定义一个有符号的64位整数类型。 */
typedef PG_INT64_TYPE pg_int64;


/*
 * 错误消息字段的标识符。保留在此以保持
 * 前端和后端之间的共同使用，并且还将它们导出到libpq
 * 应用程序。
 */
#define PG_DIAG_SEVERITY		'S'
#define PG_DIAG_SEVERITY_NONLOCALIZED 'V'
#define PG_DIAG_SQLSTATE		'C'
#define PG_DIAG_MESSAGE_PRIMARY 'M'
#define PG_DIAG_MESSAGE_DETAIL	'D'
#define PG_DIAG_MESSAGE_HINT	'H'
#define PG_DIAG_STATEMENT_POSITION 'P'
#define PG_DIAG_INTERNAL_POSITION 'p'
#define PG_DIAG_INTERNAL_QUERY	'q'
#define PG_DIAG_CONTEXT			'W'
#define PG_DIAG_SCHEMA_NAME		's'
#define PG_DIAG_TABLE_NAME		't'
#define PG_DIAG_COLUMN_NAME		'c'
#define PG_DIAG_DATATYPE_NAME	'd'
#define PG_DIAG_CONSTRAINT_NAME 'n'
#define PG_DIAG_SOURCE_FILE		'F'
#define PG_DIAG_SOURCE_LINE		'L'
#define PG_DIAG_SOURCE_FUNCTION 'R'

#endif							/* POSTGRES_EXT_H */
